# !/usr/bin/env python
# -*- coding: utf-8 -*-
# ------------------------------
'''
concurrent 实现进程线程异步的模块
'''

# 导包
from concurrent.futures import Future
import asyncio
from concurrent.futures.thread import ThreadPoolExecutor
from concurrent.futures.process import ProcessPoolExecutor
import concurrent.futures


# def func(num):
#     '''
#     打印相应值
#     '''
#     print(num)
#     return 3
#
# def main():
#     # 通过concurrnet创建线程池
#     pools = ThreadPoolExecutor(5)
#     for i in range(10):
#         fu = pools.submit(func, i)   # 通过向线程池中添加任务，生成future对象
#         print(fu)
#         '<Future at 0x23dc1382a08 state=finished returned NoneType>'
#
# if __name__ == '__main__':
#     main()



'''
当遇到不支持协程异步的模块时，我们可以用concurrent创建的进程池或线程池,返回的的那个future对像
对应的是那个不适合做异步方法，await后可以加future对象，此时通过future做异步
'''
def func1():
    '''
    模拟不支持协程异步的模块
    '''
    return 1

async def main():
    # 获取当前事件循环对象
    loop = asyncio.get_running_loop()
    # 通过循环事件内部会自己创建池子默认为线程池
    fut = loop.run_in_executor(None, func1)
    await fut


    # with ThreadPoolExecutor() as pool:   #创建线程池，进程池一样的
    #     await loop.run_in_executor(pool, func1)   # 直接创建future对象去等待的方法，


if __name__ == '__main__':
    asyncio.run(main())